package com.huoniu.common.core;

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

/**
 * @类 名： BaseEnum <br/>
 * @描 述： <br/>
 * @日 期： 2020/9/27 15:27<br/>
 * @作 者： 侯建军<br/>
 * @版 本： 1.0.0
 * @since JDK 1.8
 */
@JsonDeserialize(using = BaseEnumDeserializer.class)
@JsonSerialize(using = BaseEnumSerializer.class)
public interface BaseEnum {
    /**
     * @description：必须在子类的重写方法返回具体的枚举name  ，例如return this.name()<br/>
     */
    String getCode();
    String getDisplayName();
    String getName();

    /**
     * 根据枚举名称获取枚举
     * @param name
     * @param clazz
     * @param <E>
     * @return
     */
    static <E extends Enum<E>> BaseEnum valueOf(String name,Class<E> clazz) {
        BaseEnum enumm = (BaseEnum) Enum.valueOf(clazz, name);
        return enumm;
    }
}